package com.bootdo.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

import java.text.MessageFormat;

public class LogHelper {

	protected Logger logger = null;
	protected org.apache.logging.log4j.Logger saveUserOperatorLogger = null;

	public LogHelper(Class<?> clazz) {
		this.logger = LoggerFactory.getLogger(clazz);
	}

	public void debug(String msg) {
		logger.debug(msg);
	}

	public void debug(String format, Object... argArray) {
		if (logger.isDebugEnabled()) {
			String msg = MessageFormat.format(format, argArray);
			logger.debug(msg);
		}
	}

	public void debug(String msg, Throwable t) {
		logger.debug(msg, t);
	}

	public void info(String msg) {

		StackTraceElement[] stacks = new Throwable().getStackTrace();
		int lineNumber = stacks[1].getLineNumber();
		String methodName = stacks[1].getMethodName();
		MDC.put("lineNumber", lineNumber + "");
		MDC.put("methodName", methodName);
		logger.info(msg);
		MDC.remove("lineNumber");
		MDC.remove("methodName");
	}

	public void info(String format, Object... argArray) {
		if (logger.isInfoEnabled()) {
			String msg = MessageFormat.format(format, argArray);
			logger.info(msg);
		}
	}

	public void info(String msg, Throwable t) {
		logger.info(msg, t);
	}

	public void warn(String msg) {
		logger.warn(msg);
	}

	public void warn(String format, Object... argArray) {
		if (logger.isWarnEnabled()) {
			String msg = MessageFormat.format(format, argArray);
			logger.warn(msg);
		}
	}

	public void warn(String msg, Throwable t) {
		logger.warn(msg, t);
	}

	public void error(String msg) {
		logger.error(msg);
	}

	public void error(String format, Object... argArray) {
		if (logger.isErrorEnabled()) {
			String msg = MessageFormat.format(format, argArray);
			logger.error(msg);
		}
	}

	public void error(String msg, Throwable t) {
		logger.error(msg, t);
	}

	public void error(Throwable t) {
		this.error("", t);
	}

	public boolean isDebugEnabled() {
		return logger.isDebugEnabled();
	}

	public boolean isInfoEnabled() {
		return logger.isInfoEnabled();
	}

	public boolean isWarnEnabled() {
		return logger.isWarnEnabled();
	}

	public boolean isErrorEnabled() {
		return logger.isErrorEnabled();
	}
}
